001 /**
002 * Created by IntelliJ IDEA.
003 * User: Wei Wang
004 * Date: Nov 27, 2002
005 * Time: 9:11:28 PM
006 */
007
008 package EVolve.visualization.XYViz.ValRefViz.HotSpotViz;
009
010 import EVolve.data.*;
011 import EVolve.visualization.*;
012 import EVolve.visualization.Dimension;
013 import EVolve.util.painters.PredictionPainter;
014 import javax.swing.*;
015 import java.awt.*;
016
017 public class PredictionViz extends HotSpotVisualization{
018 private PredictorFactory[] factory; // predictor factories
019 private PredictorFactory selectedFactory; // predictor factory in use
020 private Predictor[] predictor; // predictors
021 private JComboBox comboPredictor; // combobox for selecting predictor factory
022
023 public PredictionViz(PredictorFactory[] factory) {
024 super();
025 this.factory = factory;
026 painters[0] = new PredictionPainter();
027 painters[1] = painters[0];
028 }
029
030 public Dimension[] createDimension() {
031 Dimension [] returnDimension = new Dimension[3];
032
033 xAxis = new ValueDimension();
034 yAxis = new ReferenceDimension();
035 zAxis = new ReferenceDimension();
036 returnDimension[0] = xAxis;
037 returnDimension[1] = yAxis;
038 returnDimension[2] = zAxis;
039
040 return returnDimension;
041 }
042
043 protected JPanel createConfigurationPanel() {
044 configurationPanel = new JPanel(new GridLayout(2, 1, 5, 5));
045
046 selectedFactory = factory[0];
047
048 JPanel panelTop = new JPanel(new FlowLayout());
049 configurationPanel.add(panelTop);
050
051 panelTop.add(new JLabel("Predictor: "));
052
053 comboPredictor = new JComboBox();
054 for (int i = 0; i < factory.length; i++) {
055 comboPredictor.addItem(factory[i].getName());
056 }
057 panelTop.add(comboPredictor);
058
059 JPanel returnValue = super.createConfigurationPanel();
060
061 comboPainter.removeItemAt(0);
062 return returnValue;
063 }
064
065 public void preVisualize() {
066 predictor = new Predictor[yAxis.getMaxEntityNumber()];
067 for (int i = 0; i < predictor.length; i++) {
068 predictor[i] = selectedFactory.createPredictor();
069 }
070 super.preVisualize();
071 }
072
073 public void receiveElement(Element element) {
074 if (element.isOptional()) return;
075
076 long x = xAxis.getField(element);
077 long y = yAxis.getField(element);
078 long z = zAxis.getField(element);
079
080 phaseDetector.collectData(x/interval,y);
081
082 paint(x,y,zAxis.getEntityFromInt((int)z).getId());
083 }
084
085 public void visualize() {
086 yAxis.addComparator(new ValueComparator("Miss", false, ((PredictionPainter)painter).getMiss(),yAxis.getEntityName2IntMap()));
087 sort();
088 }
089
090 protected void updateConfiguration() {
091 if (autoPredictorname == null)
092 selectedFactory = factory[comboPredictor.getSelectedIndex()];
093 else {
094 for (int i=0; i < factory.length; i++) {
095 if (factory[i].getName().equals(autoPredictorname)) {
096 selectedFactory = factory[i];
097 break;
098 }
099 }
100 }
101
102 super.updateConfiguration();
103 }
104
105 public PredictorFactory getPredictor() {
106 return selectedFactory;
107 }
108
109 protected void installPainter() {
110 ((PredictionPainter)painters[0]).setPredictor(predictor,zAxis.getDataFilter().getTargetType());
111 super.installPainter();
112 }
113
114 public Object clone() {
115 PredictionViz o = (PredictionViz) super.clone();
116 o.factory = new PredictorFactory[factory.length];
117 for (int i=0; i<factory.length; i++) {
118 o.factory[i] = (PredictorFactory)factory[i].clone();
119 }
120 o.selectedFactory = (PredictorFactory)selectedFactory.clone();
121 if (predictor != null) {
122 o.predictor = new Predictor[predictor.length];
123 for (int i=0; i<predictor.length; i++)
124 o.predictor[i] = (Predictor)predictor[i].clone();
125 }
126 return o;
127 }
128 }